//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2021 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto/tree/main/CodeGenerator. DO NOT EDIT.

import Foundation
import SotoCore

extension ApiGatewayV2 {
    // MARK: Enums

    public enum AuthorizationType: String, CustomStringConvertible, Codable {
        case awsIam = "AWS_IAM"
        case custom = "CUSTOM"
        case jwt = "JWT"
        case none = "NONE"
        public var description: String { return self.rawValue }
    }

    public enum AuthorizerType: String, CustomStringConvertible, Codable {
        case jwt = "JWT"
        case request = "REQUEST"
        public var description: String { return self.rawValue }
    }

    public enum ConnectionType: String, CustomStringConvertible, Codable {
        case internet = "INTERNET"
        case vpcLink = "VPC_LINK"
        public var description: String { return self.rawValue }
    }

    public enum ContentHandlingStrategy: String, CustomStringConvertible, Codable {
        case convertToBinary = "CONVERT_TO_BINARY"
        case convertToText = "CONVERT_TO_TEXT"
        public var description: String { return self.rawValue }
    }

    public enum DeploymentStatus: String, CustomStringConvertible, Codable {
        case deployed = "DEPLOYED"
        case failed = "FAILED"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum DomainNameStatus: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case updating = "UPDATING"
        public var description: String { return self.rawValue }
    }

    public enum EndpointType: String, CustomStringConvertible, Codable {
        case edge = "EDGE"
        case regional = "REGIONAL"
        public var description: String { return self.rawValue }
    }

    public enum IntegrationType: String, CustomStringConvertible, Codable {
        case aws = "AWS"
        case awsProxy = "AWS_PROXY"
        case http = "HTTP"
        case httpProxy = "HTTP_PROXY"
        case mock = "MOCK"
        public var description: String { return self.rawValue }
    }

    public enum LoggingLevel: String, CustomStringConvertible, Codable {
        case error = "ERROR"
        case info = "INFO"
        case off = "OFF"
        public var description: String { return self.rawValue }
    }

    public enum PassthroughBehavior: String, CustomStringConvertible, Codable {
        case never = "NEVER"
        case whenNoMatch = "WHEN_NO_MATCH"
        case whenNoTemplates = "WHEN_NO_TEMPLATES"
        public var description: String { return self.rawValue }
    }

    public enum ProtocolType: String, CustomStringConvertible, Codable {
        case http = "HTTP"
        case websocket = "WEBSOCKET"
        public var description: String { return self.rawValue }
    }

    public enum SecurityPolicy: String, CustomStringConvertible, Codable {
        case tls10 = "TLS_1_0"
        case tls12 = "TLS_1_2"
        public var description: String { return self.rawValue }
    }

    public enum VpcLinkStatus: String, CustomStringConvertible, Codable {
        case available = "AVAILABLE"
        case deleting = "DELETING"
        case failed = "FAILED"
        case inactive = "INACTIVE"
        case pending = "PENDING"
        public var description: String { return self.rawValue }
    }

    public enum VpcLinkVersion: String, CustomStringConvertible, Codable {
        case v2 = "V2"
        public var description: String { return self.rawValue }
    }

    // MARK: Shapes

    public struct AccessLogSettings: AWSEncodableShape & AWSDecodableShape {
        /// The ARN of the CloudWatch Logs log group to receive access logs.
        public let destinationArn: String?
        /// A single line format of the access logs of data, as specified by selected $context variables. The format must include at least $context.requestId.
        public let format: String?

        public init(destinationArn: String? = nil, format: String? = nil) {
            self.destinationArn = destinationArn
            self.format = format
        }

        private enum CodingKeys: String, CodingKey {
            case destinationArn
            case format
        }
    }

    public struct Api: AWSDecodableShape {
        /// The URI of the API, of the form {api-id}.execute-api.{region}.amazonaws.com. The stage name is typically appended to this URI to form a complete path to a deployed API stage.
        public let apiEndpoint: String?
        /// Specifies whether an API is managed by API Gateway. You can't update or delete a managed API by using API Gateway. A managed API can be deleted only through the tooling or service that created it.
        public let apiGatewayManaged: Bool?
        /// The API ID.
        public let apiId: String?
        /// An API key selection expression. Supported only for WebSocket APIs. See API Key Selection Expressions.
        public let apiKeySelectionExpression: String?
        /// A CORS configuration. Supported only for HTTP APIs.
        public let corsConfiguration: Cors?
        /// The timestamp when the API was created.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        /// The description of the API.
        public let description: String?
        /// Specifies whether clients can invoke your API by using the default execute-api endpoint. By default, clients can invoke your API with the default https://{api_id}.execute-api.{region}.amazonaws.com endpoint. To require that clients use a custom domain name to invoke your API, disable the default endpoint.
        public let disableExecuteApiEndpoint: Bool?
        /// Avoid validating models when creating a deployment. Supported only for WebSocket APIs.
        public let disableSchemaValidation: Bool?
        /// The validation information during API import. This may include particular properties of your OpenAPI definition which are ignored during import. Supported only for HTTP APIs.
        public let importInfo: [String]?
        /// The name of the API.
        public let name: String
        /// The API protocol.
        public let protocolType: ProtocolType
        /// The route selection expression for the API. For HTTP APIs, the routeSelectionExpression must be ${request.method} ${request.path}. If not provided, this will be the default for HTTP APIs. This property is required for WebSocket APIs.
        public let routeSelectionExpression: String
        /// A collection of tags associated with the API.
        public let tags: [String: String]?
        /// A version identifier for the API.
        public let version: String?
        /// The warning messages reported when failonwarnings is turned on during API import.
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String, protocolType: ProtocolType, routeSelectionExpression: String, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct ApiMapping: AWSDecodableShape {
        /// The API identifier.
        public let apiId: String
        /// The API mapping identifier.
        public let apiMappingId: String?
        /// The API mapping key.
        public let apiMappingKey: String?
        /// The API stage.
        public let stage: String

        public init(apiId: String, apiMappingId: String? = nil, apiMappingKey: String? = nil, stage: String) {
            self.apiId = apiId
            self.apiMappingId = apiMappingId
            self.apiMappingKey = apiMappingKey
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingId
            case apiMappingKey
            case stage
        }
    }

    public struct Authorizer: AWSDecodableShape {
        /// Specifies the required credentials as an IAM role for API Gateway to invoke the authorizer. To specify an IAM role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To use resource-based permissions on the Lambda function, don't specify this parameter. Supported only for REQUEST authorizers.
        public let authorizerCredentialsArn: String?
        /// The authorizer identifier.
        public let authorizerId: String?
        /// Specifies the format of the payload sent to an HTTP API Lambda authorizer. Required for HTTP API Lambda authorizers. Supported values are 1.0 and 2.0. To learn more, see Working with AWS Lambda authorizers for HTTP APIs.
        public let authorizerPayloadFormatVersion: String?
        /// The time to live (TTL) for cached authorizer results, in seconds. If it equals 0, authorization caching is disabled. If it is greater than 0, API Gateway caches authorizer responses. The maximum value is 3600, or 1 hour. Supported only for HTTP API Lambda authorizers.
        public let authorizerResultTtlInSeconds: Int?
        /// The authorizer type. Specify REQUEST for a Lambda function using incoming request parameters. Specify JWT to use JSON Web Tokens (supported only for HTTP APIs).
        public let authorizerType: AuthorizerType?
        /// The authorizer's Uniform Resource Identifier (URI). For REQUEST authorizers, this must be a well-formed Lambda function URI, for example, arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:{account_id}:function:{lambda_function_name}/invocations. In general, the URI has this form: arn:aws:apigateway:{region}:lambda:path/{service_api}
        ///                , where {region} is the same as the region hosting the Lambda function, path indicates that the remaining substring in the URI should be treated as the path to the resource, including the initial /. For Lambda functions, this is usually of the form /2015-03-31/functions/[FunctionARN]/invocations. Supported only for REQUEST authorizers.
        public let authorizerUri: String?
        /// Specifies whether a Lambda authorizer returns a response in a simple format. If enabled, the Lambda authorizer can return a boolean value instead of an IAM policy. Supported only for HTTP APIs. To learn more, see Working with AWS Lambda authorizers for HTTP APIs
        public let enableSimpleResponses: Bool?
        /// The identity source for which authorization is requested. For a REQUEST authorizer, this is optional. The value is a set of one or more mapping expressions of the specified request parameters. The identity source can be headers, query string parameters, stage variables, and context parameters. For example, if an Auth header and a Name query string parameter are defined as identity sources, this value is route.request.header.Auth, route.request.querystring.Name for WebSocket APIs. For HTTP APIs, use selection expressions prefixed with $, for example, $request.header.Auth, $request.querystring.Name. These parameters are used to perform runtime validation for Lambda-based authorizers by verifying all of the identity-related request parameters are present in the request, not null, and non-empty. Only when this is true does the authorizer invoke the authorizer Lambda function. Otherwise, it returns a 401 Unauthorized response without calling the Lambda function. For HTTP APIs, identity sources are also used as the cache key when caching is enabled. To learn more, see Working with AWS Lambda authorizers for HTTP APIs. For JWT, a single entry that specifies where to extract the JSON Web Token (JWT) from inbound requests. Currently only header-based and query parameter-based selections are supported, for example $request.header.Authorization.
        public let identitySource: [String]?
        /// The validation expression does not apply to the REQUEST authorizer.
        public let identityValidationExpression: String?
        /// Represents the configuration of a JWT authorizer. Required for the JWT authorizer type. Supported only for HTTP APIs.
        public let jwtConfiguration: JWTConfiguration?
        /// The name of the authorizer.
        public let name: String

        public init(authorizerCredentialsArn: String? = nil, authorizerId: String? = nil, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType? = nil, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String]? = nil, identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String) {
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerId = authorizerId
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerId
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct Cors: AWSEncodableShape & AWSDecodableShape {
        /// Specifies whether credentials are included in the CORS request. Supported only for HTTP APIs.
        public let allowCredentials: Bool?
        /// Represents a collection of allowed headers. Supported only for HTTP APIs.
        public let allowHeaders: [String]?
        /// Represents a collection of allowed HTTP methods. Supported only for HTTP APIs.
        public let allowMethods: [String]?
        /// Represents a collection of allowed origins. Supported only for HTTP APIs.
        public let allowOrigins: [String]?
        /// Represents a collection of exposed headers. Supported only for HTTP APIs.
        public let exposeHeaders: [String]?
        /// The number of seconds that the browser should cache preflight request results. Supported only for HTTP APIs.
        public let maxAge: Int?

        public init(allowCredentials: Bool? = nil, allowHeaders: [String]? = nil, allowMethods: [String]? = nil, allowOrigins: [String]? = nil, exposeHeaders: [String]? = nil, maxAge: Int? = nil) {
            self.allowCredentials = allowCredentials
            self.allowHeaders = allowHeaders
            self.allowMethods = allowMethods
            self.allowOrigins = allowOrigins
            self.exposeHeaders = exposeHeaders
            self.maxAge = maxAge
        }

        public func validate(name: String) throws {
            try self.validate(self.maxAge, name: "maxAge", parent: name, max: 86400)
            try self.validate(self.maxAge, name: "maxAge", parent: name, min: -1)
        }

        private enum CodingKeys: String, CodingKey {
            case allowCredentials
            case allowHeaders
            case allowMethods
            case allowOrigins
            case exposeHeaders
            case maxAge
        }
    }

    public struct CreateApiMappingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let apiId: String
        public let apiMappingKey: String?
        public let domainName: String
        public let stage: String

        public init(apiId: String, apiMappingKey: String? = nil, domainName: String, stage: String) {
            self.apiId = apiId
            self.apiMappingKey = apiMappingKey
            self.domainName = domainName
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingKey
            case stage
        }
    }

    public struct CreateApiMappingResponse: AWSDecodableShape {
        public let apiId: String?
        public let apiMappingId: String?
        public let apiMappingKey: String?
        public let stage: String?

        public init(apiId: String? = nil, apiMappingId: String? = nil, apiMappingKey: String? = nil, stage: String? = nil) {
            self.apiId = apiId
            self.apiMappingId = apiMappingId
            self.apiMappingKey = apiMappingKey
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingId
            case apiMappingKey
            case stage
        }
    }

    public struct CreateApiRequest: AWSEncodableShape {
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        public let credentialsArn: String?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let name: String
        public let protocolType: ProtocolType
        public let routeKey: String?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let target: String?
        public let version: String?

        public init(apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, credentialsArn: String? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, name: String, protocolType: ProtocolType, routeKey: String? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, target: String? = nil, version: String? = nil) {
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.credentialsArn = credentialsArn
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.name = name
            self.protocolType = protocolType
            self.routeKey = routeKey
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.target = target
            self.version = version
        }

        public func validate(name: String) throws {
            try self.corsConfiguration?.validate(name: "\(name).corsConfiguration")
        }

        private enum CodingKeys: String, CodingKey {
            case apiKeySelectionExpression
            case corsConfiguration
            case credentialsArn
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case name
            case protocolType
            case routeKey
            case routeSelectionExpression
            case tags
            case target
            case version
        }
    }

    public struct CreateApiResponse: AWSDecodableShape {
        public let apiEndpoint: String?
        public let apiGatewayManaged: Bool?
        public let apiId: String?
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let importInfo: [String]?
        public let name: String?
        public let protocolType: ProtocolType?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let version: String?
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String? = nil, protocolType: ProtocolType? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct CreateAuthorizerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let authorizerCredentialsArn: String?
        public let authorizerPayloadFormatVersion: String?
        public let authorizerResultTtlInSeconds: Int?
        public let authorizerType: AuthorizerType
        public let authorizerUri: String?
        public let enableSimpleResponses: Bool?
        public let identitySource: [String]
        public let identityValidationExpression: String?
        public let jwtConfiguration: JWTConfiguration?
        public let name: String

        public init(apiId: String, authorizerCredentialsArn: String? = nil, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String], identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String) {
            self.apiId = apiId
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.authorizerResultTtlInSeconds, name: "authorizerResultTtlInSeconds", parent: name, max: 3600)
            try self.validate(self.authorizerResultTtlInSeconds, name: "authorizerResultTtlInSeconds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct CreateAuthorizerResponse: AWSDecodableShape {
        public let authorizerCredentialsArn: String?
        public let authorizerId: String?
        public let authorizerPayloadFormatVersion: String?
        public let authorizerResultTtlInSeconds: Int?
        public let authorizerType: AuthorizerType?
        public let authorizerUri: String?
        public let enableSimpleResponses: Bool?
        public let identitySource: [String]?
        public let identityValidationExpression: String?
        public let jwtConfiguration: JWTConfiguration?
        public let name: String?

        public init(authorizerCredentialsArn: String? = nil, authorizerId: String? = nil, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType? = nil, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String]? = nil, identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String? = nil) {
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerId = authorizerId
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerId
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct CreateDeploymentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let description: String?
        public let stageName: String?

        public init(apiId: String, description: String? = nil, stageName: String? = nil) {
            self.apiId = apiId
            self.description = description
            self.stageName = stageName
        }

        private enum CodingKeys: String, CodingKey {
            case description
            case stageName
        }
    }

    public struct CreateDeploymentResponse: AWSDecodableShape {
        public let autoDeployed: Bool?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let deploymentId: String?
        public let deploymentStatus: DeploymentStatus?
        public let deploymentStatusMessage: String?
        public let description: String?

        public init(autoDeployed: Bool? = nil, createdDate: Date? = nil, deploymentId: String? = nil, deploymentStatus: DeploymentStatus? = nil, deploymentStatusMessage: String? = nil, description: String? = nil) {
            self.autoDeployed = autoDeployed
            self.createdDate = createdDate
            self.deploymentId = deploymentId
            self.deploymentStatus = deploymentStatus
            self.deploymentStatusMessage = deploymentStatusMessage
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case autoDeployed
            case createdDate
            case deploymentId
            case deploymentStatus
            case deploymentStatusMessage
            case description
        }
    }

    public struct CreateDomainNameRequest: AWSEncodableShape {
        public let domainName: String
        public let domainNameConfigurations: [DomainNameConfiguration]?
        public let mutualTlsAuthentication: MutualTlsAuthenticationInput?
        public let tags: [String: String]?

        public init(domainName: String, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthenticationInput? = nil, tags: [String: String]? = nil) {
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case domainName
            case domainNameConfigurations
            case mutualTlsAuthentication
            case tags
        }
    }

    public struct CreateDomainNameResponse: AWSDecodableShape {
        public let apiMappingSelectionExpression: String?
        public let domainName: String?
        public let domainNameConfigurations: [DomainNameConfiguration]?
        public let mutualTlsAuthentication: MutualTlsAuthentication?
        public let tags: [String: String]?

        public init(apiMappingSelectionExpression: String? = nil, domainName: String? = nil, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthentication? = nil, tags: [String: String]? = nil) {
            self.apiMappingSelectionExpression = apiMappingSelectionExpression
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case apiMappingSelectionExpression
            case domainName
            case domainNameConfigurations
            case mutualTlsAuthentication
            case tags
        }
    }

    public struct CreateIntegrationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let connectionId: String?
        public let connectionType: ConnectionType?
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let credentialsArn: String?
        public let description: String?
        public let integrationMethod: String?
        public let integrationSubtype: String?
        public let integrationType: IntegrationType
        public let integrationUri: String?
        public let passthroughBehavior: PassthroughBehavior?
        public let payloadFormatVersion: String?
        public let requestParameters: [String: String]?
        public let requestTemplates: [String: String]?
        public let responseParameters: [String: [String: String]]?
        public let templateSelectionExpression: String?
        public let timeoutInMillis: Int?
        public let tlsConfig: TlsConfigInput?

        public init(apiId: String, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationMethod: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfigInput? = nil) {
            self.apiId = apiId
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationMethod = integrationMethod
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        public func validate(name: String) throws {
            try self.validate(self.timeoutInMillis, name: "timeoutInMillis", parent: name, max: 30000)
            try self.validate(self.timeoutInMillis, name: "timeoutInMillis", parent: name, min: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationMethod
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct CreateIntegrationResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId"))
        ]

        public let apiId: String
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let integrationId: String
        public let integrationResponseKey: String
        public let responseParameters: [String: String]?
        public let responseTemplates: [String: String]?
        public let templateSelectionExpression: String?

        public init(apiId: String, contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationId: String, integrationResponseKey: String, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.apiId = apiId
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationId = integrationId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct CreateIntegrationResponseResponse: AWSDecodableShape {
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let integrationResponseId: String?
        public let integrationResponseKey: String?
        public let responseParameters: [String: String]?
        public let responseTemplates: [String: String]?
        public let templateSelectionExpression: String?

        public init(contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationResponseId: String? = nil, integrationResponseKey: String? = nil, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationResponseId = integrationResponseId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseId
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct CreateIntegrationResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let connectionId: String?
        public let connectionType: ConnectionType?
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let credentialsArn: String?
        public let description: String?
        public let integrationId: String?
        public let integrationMethod: String?
        public let integrationResponseSelectionExpression: String?
        public let integrationSubtype: String?
        public let integrationType: IntegrationType?
        public let integrationUri: String?
        public let passthroughBehavior: PassthroughBehavior?
        public let payloadFormatVersion: String?
        public let requestParameters: [String: String]?
        public let requestTemplates: [String: String]?
        public let responseParameters: [String: [String: String]]?
        public let templateSelectionExpression: String?
        public let timeoutInMillis: Int?
        public let tlsConfig: TlsConfig?

        public init(apiGatewayManaged: Bool? = nil, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationId: String? = nil, integrationMethod: String? = nil, integrationResponseSelectionExpression: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType? = nil, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfig? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationId = integrationId
            self.integrationMethod = integrationMethod
            self.integrationResponseSelectionExpression = integrationResponseSelectionExpression
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationId
            case integrationMethod
            case integrationResponseSelectionExpression
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct CreateModelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let contentType: String?
        public let description: String?
        public let name: String
        public let schema: String

        public init(apiId: String, contentType: String? = nil, description: String? = nil, name: String, schema: String) {
            self.apiId = apiId
            self.contentType = contentType
            self.description = description
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case name
            case schema
        }
    }

    public struct CreateModelResponse: AWSDecodableShape {
        public let contentType: String?
        public let description: String?
        public let modelId: String?
        public let name: String?
        public let schema: String?

        public init(contentType: String? = nil, description: String? = nil, modelId: String? = nil, name: String? = nil, schema: String? = nil) {
            self.contentType = contentType
            self.description = description
            self.modelId = modelId
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case modelId
            case name
            case schema
        }
    }

    public struct CreateRouteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let apiKeyRequired: Bool?
        public let authorizationScopes: [String]?
        public let authorizationType: AuthorizationType?
        public let authorizerId: String?
        public let modelSelectionExpression: String?
        public let operationName: String?
        public let requestModels: [String: String]?
        public let requestParameters: [String: ParameterConstraints]?
        public let routeKey: String
        public let routeResponseSelectionExpression: String?
        public let target: String?

        public init(apiId: String, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeKey: String, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiId = apiId
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct CreateRouteResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let modelSelectionExpression: String?
        public let responseModels: [String: String]?
        public let responseParameters: [String: ParameterConstraints]?
        public let routeId: String
        public let routeResponseKey: String

        public init(apiId: String, modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeId: String, routeResponseKey: String) {
            self.apiId = apiId
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeId = routeId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseKey
        }
    }

    public struct CreateRouteResponseResponse: AWSDecodableShape {
        public let modelSelectionExpression: String?
        public let responseModels: [String: String]?
        public let responseParameters: [String: ParameterConstraints]?
        public let routeResponseId: String?
        public let routeResponseKey: String?

        public init(modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeResponseId: String? = nil, routeResponseKey: String? = nil) {
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeResponseId = routeResponseId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseId
            case routeResponseKey
        }
    }

    public struct CreateRouteResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let apiKeyRequired: Bool?
        public let authorizationScopes: [String]?
        public let authorizationType: AuthorizationType?
        public let authorizerId: String?
        public let modelSelectionExpression: String?
        public let operationName: String?
        public let requestModels: [String: String]?
        public let requestParameters: [String: ParameterConstraints]?
        public let routeId: String?
        public let routeKey: String?
        public let routeResponseSelectionExpression: String?
        public let target: String?

        public init(apiGatewayManaged: Bool? = nil, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeId: String? = nil, routeKey: String? = nil, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeId = routeId
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeId
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct CreateStageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let accessLogSettings: AccessLogSettings?
        public let apiId: String
        public let autoDeploy: Bool?
        public let clientCertificateId: String?
        public let defaultRouteSettings: RouteSettings?
        public let deploymentId: String?
        public let description: String?
        public let routeSettings: [String: RouteSettings]?
        public let stageName: String
        public let stageVariables: [String: String]?
        public let tags: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiId: String, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String, stageVariables: [String: String]? = nil, tags: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiId = apiId
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case autoDeploy
            case clientCertificateId
            case defaultRouteSettings
            case deploymentId
            case description
            case routeSettings
            case stageName
            case stageVariables
            case tags
        }
    }

    public struct CreateStageResponse: AWSDecodableShape {
        public let accessLogSettings: AccessLogSettings?
        public let apiGatewayManaged: Bool?
        public let autoDeploy: Bool?
        public let clientCertificateId: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let defaultRouteSettings: RouteSettings?
        public let deploymentId: String?
        public let description: String?
        public let lastDeploymentStatusMessage: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastUpdatedDate: Date?
        public let routeSettings: [String: RouteSettings]?
        public let stageName: String?
        public let stageVariables: [String: String]?
        public let tags: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiGatewayManaged: Bool? = nil, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, createdDate: Date? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, lastDeploymentStatusMessage: String? = nil, lastUpdatedDate: Date? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String? = nil, stageVariables: [String: String]? = nil, tags: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiGatewayManaged = apiGatewayManaged
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.createdDate = createdDate
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.lastDeploymentStatusMessage = lastDeploymentStatusMessage
            self.lastUpdatedDate = lastUpdatedDate
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case apiGatewayManaged
            case autoDeploy
            case clientCertificateId
            case createdDate
            case defaultRouteSettings
            case deploymentId
            case description
            case lastDeploymentStatusMessage
            case lastUpdatedDate
            case routeSettings
            case stageName
            case stageVariables
            case tags
        }
    }

    public struct CreateVpcLinkRequest: AWSEncodableShape {
        public let name: String
        public let securityGroupIds: [String]?
        public let subnetIds: [String]
        public let tags: [String: String]?

        public init(name: String, securityGroupIds: [String]? = nil, subnetIds: [String], tags: [String: String]? = nil) {
            self.name = name
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case name
            case securityGroupIds
            case subnetIds
            case tags
        }
    }

    public struct CreateVpcLinkResponse: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let name: String?
        public let securityGroupIds: [String]?
        public let subnetIds: [String]?
        public let tags: [String: String]?
        public let vpcLinkId: String?
        public let vpcLinkStatus: VpcLinkStatus?
        public let vpcLinkStatusMessage: String?
        public let vpcLinkVersion: VpcLinkVersion?

        public init(createdDate: Date? = nil, name: String? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]? = nil, tags: [String: String]? = nil, vpcLinkId: String? = nil, vpcLinkStatus: VpcLinkStatus? = nil, vpcLinkStatusMessage: String? = nil, vpcLinkVersion: VpcLinkVersion? = nil) {
            self.createdDate = createdDate
            self.name = name
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
            self.tags = tags
            self.vpcLinkId = vpcLinkId
            self.vpcLinkStatus = vpcLinkStatus
            self.vpcLinkStatusMessage = vpcLinkStatusMessage
            self.vpcLinkVersion = vpcLinkVersion
        }

        private enum CodingKeys: String, CodingKey {
            case createdDate
            case name
            case securityGroupIds
            case subnetIds
            case tags
            case vpcLinkId
            case vpcLinkStatus
            case vpcLinkStatusMessage
            case vpcLinkVersion
        }
    }

    public struct DeleteAccessLogSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let apiId: String
        public let stageName: String

        public init(apiId: String, stageName: String) {
            self.apiId = apiId
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApiMappingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiMappingId", location: .uri(locationName: "apiMappingId")),
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let apiMappingId: String
        public let domainName: String

        public init(apiMappingId: String, domainName: String) {
            self.apiMappingId = apiMappingId
            self.domainName = domainName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String

        public init(apiId: String) {
            self.apiId = apiId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteAuthorizerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "authorizerId", location: .uri(locationName: "authorizerId"))
        ]

        public let apiId: String
        public let authorizerId: String

        public init(apiId: String, authorizerId: String) {
            self.apiId = apiId
            self.authorizerId = authorizerId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteCorsConfigurationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String

        public init(apiId: String) {
            self.apiId = apiId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDeploymentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "deploymentId", location: .uri(locationName: "deploymentId"))
        ]

        public let apiId: String
        public let deploymentId: String

        public init(apiId: String, deploymentId: String) {
            self.apiId = apiId
            self.deploymentId = deploymentId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteDomainNameRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let domainName: String

        public init(domainName: String) {
            self.domainName = domainName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteIntegrationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId"))
        ]

        public let apiId: String
        public let integrationId: String

        public init(apiId: String, integrationId: String) {
            self.apiId = apiId
            self.integrationId = integrationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteIntegrationResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId")),
            AWSMemberEncoding(label: "integrationResponseId", location: .uri(locationName: "integrationResponseId"))
        ]

        public let apiId: String
        public let integrationId: String
        public let integrationResponseId: String

        public init(apiId: String, integrationId: String, integrationResponseId: String) {
            self.apiId = apiId
            self.integrationId = integrationId
            self.integrationResponseId = integrationResponseId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteModelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "modelId", location: .uri(locationName: "modelId"))
        ]

        public let apiId: String
        public let modelId: String

        public init(apiId: String, modelId: String) {
            self.apiId = apiId
            self.modelId = modelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRouteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let routeId: String

        public init(apiId: String, routeId: String) {
            self.apiId = apiId
            self.routeId = routeId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRouteRequestParameterRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "requestParameterKey", location: .uri(locationName: "requestParameterKey")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let requestParameterKey: String
        public let routeId: String

        public init(apiId: String, requestParameterKey: String, routeId: String) {
            self.apiId = apiId
            self.requestParameterKey = requestParameterKey
            self.routeId = routeId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRouteResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId")),
            AWSMemberEncoding(label: "routeResponseId", location: .uri(locationName: "routeResponseId"))
        ]

        public let apiId: String
        public let routeId: String
        public let routeResponseId: String

        public init(apiId: String, routeId: String, routeResponseId: String) {
            self.apiId = apiId
            self.routeId = routeId
            self.routeResponseId = routeResponseId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteRouteSettingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeKey", location: .uri(locationName: "routeKey")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let apiId: String
        public let routeKey: String
        public let stageName: String

        public init(apiId: String, routeKey: String, stageName: String) {
            self.apiId = apiId
            self.routeKey = routeKey
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteStageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let apiId: String
        public let stageName: String

        public init(apiId: String, stageName: String) {
            self.apiId = apiId
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVpcLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "vpcLinkId", location: .uri(locationName: "vpcLinkId"))
        ]

        public let vpcLinkId: String

        public init(vpcLinkId: String) {
            self.vpcLinkId = vpcLinkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct DeleteVpcLinkResponse: AWSDecodableShape {
        public init() {}
    }

    public struct Deployment: AWSDecodableShape {
        /// Specifies whether a deployment was automatically released.
        public let autoDeployed: Bool?
        /// The date and time when the Deployment resource was created.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        /// The identifier for the deployment.
        public let deploymentId: String?
        /// The status of the deployment: PENDING, FAILED, or SUCCEEDED.
        public let deploymentStatus: DeploymentStatus?
        /// May contain additional feedback on the status of an API deployment.
        public let deploymentStatusMessage: String?
        /// The description for the deployment.
        public let description: String?

        public init(autoDeployed: Bool? = nil, createdDate: Date? = nil, deploymentId: String? = nil, deploymentStatus: DeploymentStatus? = nil, deploymentStatusMessage: String? = nil, description: String? = nil) {
            self.autoDeployed = autoDeployed
            self.createdDate = createdDate
            self.deploymentId = deploymentId
            self.deploymentStatus = deploymentStatus
            self.deploymentStatusMessage = deploymentStatusMessage
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case autoDeployed
            case createdDate
            case deploymentId
            case deploymentStatus
            case deploymentStatusMessage
            case description
        }
    }

    public struct DomainName: AWSDecodableShape {
        /// The API mapping selection expression.
        public let apiMappingSelectionExpression: String?
        /// The name of the DomainName resource.
        public let domainName: String
        /// The domain name configurations.
        public let domainNameConfigurations: [DomainNameConfiguration]?
        /// The mutual TLS authentication configuration for a custom domain name.
        public let mutualTlsAuthentication: MutualTlsAuthentication?
        /// The collection of tags associated with a domain name.
        public let tags: [String: String]?

        public init(apiMappingSelectionExpression: String? = nil, domainName: String, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthentication? = nil, tags: [String: String]? = nil) {
            self.apiMappingSelectionExpression = apiMappingSelectionExpression
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case apiMappingSelectionExpression
            case domainName
            case domainNameConfigurations
            case mutualTlsAuthentication
            case tags
        }
    }

    public struct DomainNameConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// A domain name for the API.
        public let apiGatewayDomainName: String?
        /// An AWS-managed certificate that will be used by the edge-optimized endpoint for this domain name. AWS Certificate Manager is the only supported source.
        public let certificateArn: String?
        /// The user-friendly name of the certificate that will be used by the edge-optimized endpoint for this domain name.
        public let certificateName: String?
        /// The timestamp when the certificate that was used by edge-optimized endpoint for this domain name was uploaded.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var certificateUploadDate: Date?
        /// The status of the domain name migration. The valid values are AVAILABLE and UPDATING. If the status is UPDATING, the domain cannot be modified further until the existing operation is complete. If it is AVAILABLE, the domain can be updated.
        public let domainNameStatus: DomainNameStatus?
        /// An optional text message containing detailed information about status of the domain name migration.
        public let domainNameStatusMessage: String?
        /// The endpoint type.
        public let endpointType: EndpointType?
        /// The Amazon Route 53 Hosted Zone ID of the endpoint.
        public let hostedZoneId: String?
        /// The Transport Layer Security (TLS) version of the security policy for this domain name. The valid values are TLS_1_0 and TLS_1_2.
        public let securityPolicy: SecurityPolicy?

        public init(apiGatewayDomainName: String? = nil, certificateArn: String? = nil, certificateName: String? = nil, certificateUploadDate: Date? = nil, domainNameStatus: DomainNameStatus? = nil, domainNameStatusMessage: String? = nil, endpointType: EndpointType? = nil, hostedZoneId: String? = nil, securityPolicy: SecurityPolicy? = nil) {
            self.apiGatewayDomainName = apiGatewayDomainName
            self.certificateArn = certificateArn
            self.certificateName = certificateName
            self.certificateUploadDate = certificateUploadDate
            self.domainNameStatus = domainNameStatus
            self.domainNameStatusMessage = domainNameStatusMessage
            self.endpointType = endpointType
            self.hostedZoneId = hostedZoneId
            self.securityPolicy = securityPolicy
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayDomainName
            case certificateArn
            case certificateName
            case certificateUploadDate
            case domainNameStatus
            case domainNameStatusMessage
            case endpointType
            case hostedZoneId
            case securityPolicy
        }
    }

    public struct ExportApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "exportVersion", location: .querystring(locationName: "exportVersion")),
            AWSMemberEncoding(label: "includeExtensions", location: .querystring(locationName: "includeExtensions")),
            AWSMemberEncoding(label: "outputType", location: .querystring(locationName: "outputType")),
            AWSMemberEncoding(label: "specification", location: .uri(locationName: "specification")),
            AWSMemberEncoding(label: "stageName", location: .querystring(locationName: "stageName"))
        ]

        public let apiId: String
        public let exportVersion: String?
        public let includeExtensions: Bool?
        public let outputType: String
        public let specification: String
        public let stageName: String?

        public init(apiId: String, exportVersion: String? = nil, includeExtensions: Bool? = nil, outputType: String, specification: String, stageName: String? = nil) {
            self.apiId = apiId
            self.exportVersion = exportVersion
            self.includeExtensions = includeExtensions
            self.outputType = outputType
            self.specification = specification
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct ExportApiResponse: AWSDecodableShape & AWSShapeWithPayload {
        /// The key for the payload
        public static let _payloadPath: String = "body"
        public static let _payloadOptions: AWSShapePayloadOptions = [.raw]

        public let body: AWSPayload?

        public init(body: AWSPayload? = nil) {
            self.body = body
        }

        private enum CodingKeys: String, CodingKey {
            case body
        }
    }

    public struct GetApiMappingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiMappingId", location: .uri(locationName: "apiMappingId")),
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let apiMappingId: String
        public let domainName: String

        public init(apiMappingId: String, domainName: String) {
            self.apiMappingId = apiMappingId
            self.domainName = domainName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApiMappingResponse: AWSDecodableShape {
        public let apiId: String?
        public let apiMappingId: String?
        public let apiMappingKey: String?
        public let stage: String?

        public init(apiId: String? = nil, apiMappingId: String? = nil, apiMappingKey: String? = nil, stage: String? = nil) {
            self.apiId = apiId
            self.apiMappingId = apiMappingId
            self.apiMappingKey = apiMappingKey
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingId
            case apiMappingKey
            case stage
        }
    }

    public struct GetApiMappingsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let domainName: String
        public let maxResults: String?
        public let nextToken: String?

        public init(domainName: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.domainName = domainName
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApiMappingsResponse: AWSDecodableShape {
        public let items: [ApiMapping]?
        public let nextToken: String?

        public init(items: [ApiMapping]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String

        public init(apiId: String) {
            self.apiId = apiId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApiResponse: AWSDecodableShape {
        public let apiEndpoint: String?
        public let apiGatewayManaged: Bool?
        public let apiId: String?
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let importInfo: [String]?
        public let name: String?
        public let protocolType: ProtocolType?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let version: String?
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String? = nil, protocolType: ProtocolType? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct GetApisRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: String?
        public let nextToken: String?

        public init(maxResults: String? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetApisResponse: AWSDecodableShape {
        public let items: [Api]?
        public let nextToken: String?

        public init(items: [Api]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetAuthorizerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "authorizerId", location: .uri(locationName: "authorizerId"))
        ]

        public let apiId: String
        public let authorizerId: String

        public init(apiId: String, authorizerId: String) {
            self.apiId = apiId
            self.authorizerId = authorizerId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAuthorizerResponse: AWSDecodableShape {
        public let authorizerCredentialsArn: String?
        public let authorizerId: String?
        public let authorizerPayloadFormatVersion: String?
        public let authorizerResultTtlInSeconds: Int?
        public let authorizerType: AuthorizerType?
        public let authorizerUri: String?
        public let enableSimpleResponses: Bool?
        public let identitySource: [String]?
        public let identityValidationExpression: String?
        public let jwtConfiguration: JWTConfiguration?
        public let name: String?

        public init(authorizerCredentialsArn: String? = nil, authorizerId: String? = nil, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType? = nil, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String]? = nil, identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String? = nil) {
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerId = authorizerId
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerId
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct GetAuthorizersRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetAuthorizersResponse: AWSDecodableShape {
        public let items: [Authorizer]?
        public let nextToken: String?

        public init(items: [Authorizer]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetDeploymentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "deploymentId", location: .uri(locationName: "deploymentId"))
        ]

        public let apiId: String
        public let deploymentId: String

        public init(apiId: String, deploymentId: String) {
            self.apiId = apiId
            self.deploymentId = deploymentId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDeploymentResponse: AWSDecodableShape {
        public let autoDeployed: Bool?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let deploymentId: String?
        public let deploymentStatus: DeploymentStatus?
        public let deploymentStatusMessage: String?
        public let description: String?

        public init(autoDeployed: Bool? = nil, createdDate: Date? = nil, deploymentId: String? = nil, deploymentStatus: DeploymentStatus? = nil, deploymentStatusMessage: String? = nil, description: String? = nil) {
            self.autoDeployed = autoDeployed
            self.createdDate = createdDate
            self.deploymentId = deploymentId
            self.deploymentStatus = deploymentStatus
            self.deploymentStatusMessage = deploymentStatusMessage
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case autoDeployed
            case createdDate
            case deploymentId
            case deploymentStatus
            case deploymentStatusMessage
            case description
        }
    }

    public struct GetDeploymentsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDeploymentsResponse: AWSDecodableShape {
        public let items: [Deployment]?
        public let nextToken: String?

        public init(items: [Deployment]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetDomainNameRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let domainName: String

        public init(domainName: String) {
            self.domainName = domainName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDomainNameResponse: AWSDecodableShape {
        public let apiMappingSelectionExpression: String?
        public let domainName: String?
        public let domainNameConfigurations: [DomainNameConfiguration]?
        public let mutualTlsAuthentication: MutualTlsAuthentication?
        public let tags: [String: String]?

        public init(apiMappingSelectionExpression: String? = nil, domainName: String? = nil, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthentication? = nil, tags: [String: String]? = nil) {
            self.apiMappingSelectionExpression = apiMappingSelectionExpression
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case apiMappingSelectionExpression
            case domainName
            case domainNameConfigurations
            case mutualTlsAuthentication
            case tags
        }
    }

    public struct GetDomainNamesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: String?
        public let nextToken: String?

        public init(maxResults: String? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetDomainNamesResponse: AWSDecodableShape {
        public let items: [DomainName]?
        public let nextToken: String?

        public init(items: [DomainName]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetIntegrationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId"))
        ]

        public let apiId: String
        public let integrationId: String

        public init(apiId: String, integrationId: String) {
            self.apiId = apiId
            self.integrationId = integrationId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetIntegrationResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId")),
            AWSMemberEncoding(label: "integrationResponseId", location: .uri(locationName: "integrationResponseId"))
        ]

        public let apiId: String
        public let integrationId: String
        public let integrationResponseId: String

        public init(apiId: String, integrationId: String, integrationResponseId: String) {
            self.apiId = apiId
            self.integrationId = integrationId
            self.integrationResponseId = integrationResponseId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetIntegrationResponseResponse: AWSDecodableShape {
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let integrationResponseId: String?
        public let integrationResponseKey: String?
        public let responseParameters: [String: String]?
        public let responseTemplates: [String: String]?
        public let templateSelectionExpression: String?

        public init(contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationResponseId: String? = nil, integrationResponseKey: String? = nil, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationResponseId = integrationResponseId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseId
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct GetIntegrationResponsesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let integrationId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, integrationId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.integrationId = integrationId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetIntegrationResponsesResponse: AWSDecodableShape {
        public let items: [IntegrationResponse]?
        public let nextToken: String?

        public init(items: [IntegrationResponse]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetIntegrationResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let connectionId: String?
        public let connectionType: ConnectionType?
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let credentialsArn: String?
        public let description: String?
        public let integrationId: String?
        public let integrationMethod: String?
        public let integrationResponseSelectionExpression: String?
        public let integrationSubtype: String?
        public let integrationType: IntegrationType?
        public let integrationUri: String?
        public let passthroughBehavior: PassthroughBehavior?
        public let payloadFormatVersion: String?
        public let requestParameters: [String: String]?
        public let requestTemplates: [String: String]?
        public let responseParameters: [String: [String: String]]?
        public let templateSelectionExpression: String?
        public let timeoutInMillis: Int?
        public let tlsConfig: TlsConfig?

        public init(apiGatewayManaged: Bool? = nil, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationId: String? = nil, integrationMethod: String? = nil, integrationResponseSelectionExpression: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType? = nil, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfig? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationId = integrationId
            self.integrationMethod = integrationMethod
            self.integrationResponseSelectionExpression = integrationResponseSelectionExpression
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationId
            case integrationMethod
            case integrationResponseSelectionExpression
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct GetIntegrationsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetIntegrationsResponse: AWSDecodableShape {
        public let items: [Integration]?
        public let nextToken: String?

        public init(items: [Integration]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetModelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "modelId", location: .uri(locationName: "modelId"))
        ]

        public let apiId: String
        public let modelId: String

        public init(apiId: String, modelId: String) {
            self.apiId = apiId
            self.modelId = modelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetModelResponse: AWSDecodableShape {
        public let contentType: String?
        public let description: String?
        public let modelId: String?
        public let name: String?
        public let schema: String?

        public init(contentType: String? = nil, description: String? = nil, modelId: String? = nil, name: String? = nil, schema: String? = nil) {
            self.contentType = contentType
            self.description = description
            self.modelId = modelId
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case modelId
            case name
            case schema
        }
    }

    public struct GetModelTemplateRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "modelId", location: .uri(locationName: "modelId"))
        ]

        public let apiId: String
        public let modelId: String

        public init(apiId: String, modelId: String) {
            self.apiId = apiId
            self.modelId = modelId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetModelTemplateResponse: AWSDecodableShape {
        public let value: String?

        public init(value: String? = nil) {
            self.value = value
        }

        private enum CodingKeys: String, CodingKey {
            case value
        }
    }

    public struct GetModelsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetModelsResponse: AWSDecodableShape {
        public let items: [Model]?
        public let nextToken: String?

        public init(items: [Model]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetRouteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let routeId: String

        public init(apiId: String, routeId: String) {
            self.apiId = apiId
            self.routeId = routeId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRouteResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId")),
            AWSMemberEncoding(label: "routeResponseId", location: .uri(locationName: "routeResponseId"))
        ]

        public let apiId: String
        public let routeId: String
        public let routeResponseId: String

        public init(apiId: String, routeId: String, routeResponseId: String) {
            self.apiId = apiId
            self.routeId = routeId
            self.routeResponseId = routeResponseId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRouteResponseResponse: AWSDecodableShape {
        public let modelSelectionExpression: String?
        public let responseModels: [String: String]?
        public let responseParameters: [String: ParameterConstraints]?
        public let routeResponseId: String?
        public let routeResponseKey: String?

        public init(modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeResponseId: String? = nil, routeResponseKey: String? = nil) {
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeResponseId = routeResponseId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseId
            case routeResponseKey
        }
    }

    public struct GetRouteResponsesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?
        public let routeId: String

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil, routeId: String) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
            self.routeId = routeId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRouteResponsesResponse: AWSDecodableShape {
        public let items: [RouteResponse]?
        public let nextToken: String?

        public init(items: [RouteResponse]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetRouteResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let apiKeyRequired: Bool?
        public let authorizationScopes: [String]?
        public let authorizationType: AuthorizationType?
        public let authorizerId: String?
        public let modelSelectionExpression: String?
        public let operationName: String?
        public let requestModels: [String: String]?
        public let requestParameters: [String: ParameterConstraints]?
        public let routeId: String?
        public let routeKey: String?
        public let routeResponseSelectionExpression: String?
        public let target: String?

        public init(apiGatewayManaged: Bool? = nil, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeId: String? = nil, routeKey: String? = nil, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeId = routeId
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeId
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct GetRoutesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetRoutesResponse: AWSDecodableShape {
        public let items: [Route]?
        public let nextToken: String?

        public init(items: [Route]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetStageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let apiId: String
        public let stageName: String

        public init(apiId: String, stageName: String) {
            self.apiId = apiId
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetStageResponse: AWSDecodableShape {
        public let accessLogSettings: AccessLogSettings?
        public let apiGatewayManaged: Bool?
        public let autoDeploy: Bool?
        public let clientCertificateId: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let defaultRouteSettings: RouteSettings?
        public let deploymentId: String?
        public let description: String?
        public let lastDeploymentStatusMessage: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastUpdatedDate: Date?
        public let routeSettings: [String: RouteSettings]?
        public let stageName: String?
        public let stageVariables: [String: String]?
        public let tags: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiGatewayManaged: Bool? = nil, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, createdDate: Date? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, lastDeploymentStatusMessage: String? = nil, lastUpdatedDate: Date? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String? = nil, stageVariables: [String: String]? = nil, tags: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiGatewayManaged = apiGatewayManaged
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.createdDate = createdDate
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.lastDeploymentStatusMessage = lastDeploymentStatusMessage
            self.lastUpdatedDate = lastUpdatedDate
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case apiGatewayManaged
            case autoDeploy
            case clientCertificateId
            case createdDate
            case defaultRouteSettings
            case deploymentId
            case description
            case lastDeploymentStatusMessage
            case lastUpdatedDate
            case routeSettings
            case stageName
            case stageVariables
            case tags
        }
    }

    public struct GetStagesRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let apiId: String
        public let maxResults: String?
        public let nextToken: String?

        public init(apiId: String, maxResults: String? = nil, nextToken: String? = nil) {
            self.apiId = apiId
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetStagesResponse: AWSDecodableShape {
        public let items: [Stage]?
        public let nextToken: String?

        public init(items: [Stage]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct GetTagsRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn"))
        ]

        public let resourceArn: String

        public init(resourceArn: String) {
            self.resourceArn = resourceArn
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetTagsResponse: AWSDecodableShape {
        public let tags: [String: String]?

        public init(tags: [String: String]? = nil) {
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct GetVpcLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "vpcLinkId", location: .uri(locationName: "vpcLinkId"))
        ]

        public let vpcLinkId: String

        public init(vpcLinkId: String) {
            self.vpcLinkId = vpcLinkId
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVpcLinkResponse: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let name: String?
        public let securityGroupIds: [String]?
        public let subnetIds: [String]?
        public let tags: [String: String]?
        public let vpcLinkId: String?
        public let vpcLinkStatus: VpcLinkStatus?
        public let vpcLinkStatusMessage: String?
        public let vpcLinkVersion: VpcLinkVersion?

        public init(createdDate: Date? = nil, name: String? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]? = nil, tags: [String: String]? = nil, vpcLinkId: String? = nil, vpcLinkStatus: VpcLinkStatus? = nil, vpcLinkStatusMessage: String? = nil, vpcLinkVersion: VpcLinkVersion? = nil) {
            self.createdDate = createdDate
            self.name = name
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
            self.tags = tags
            self.vpcLinkId = vpcLinkId
            self.vpcLinkStatus = vpcLinkStatus
            self.vpcLinkStatusMessage = vpcLinkStatusMessage
            self.vpcLinkVersion = vpcLinkVersion
        }

        private enum CodingKeys: String, CodingKey {
            case createdDate
            case name
            case securityGroupIds
            case subnetIds
            case tags
            case vpcLinkId
            case vpcLinkStatus
            case vpcLinkStatusMessage
            case vpcLinkVersion
        }
    }

    public struct GetVpcLinksRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "maxResults", location: .querystring(locationName: "maxResults")),
            AWSMemberEncoding(label: "nextToken", location: .querystring(locationName: "nextToken"))
        ]

        public let maxResults: String?
        public let nextToken: String?

        public init(maxResults: String? = nil, nextToken: String? = nil) {
            self.maxResults = maxResults
            self.nextToken = nextToken
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct GetVpcLinksResponse: AWSDecodableShape {
        public let items: [VpcLink]?
        public let nextToken: String?

        public init(items: [VpcLink]? = nil, nextToken: String? = nil) {
            self.items = items
            self.nextToken = nextToken
        }

        private enum CodingKeys: String, CodingKey {
            case items
            case nextToken
        }
    }

    public struct ImportApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "basepath", location: .querystring(locationName: "basepath")),
            AWSMemberEncoding(label: "failOnWarnings", location: .querystring(locationName: "failOnWarnings"))
        ]

        public let basepath: String?
        public let body: String
        public let failOnWarnings: Bool?

        public init(basepath: String? = nil, body: String, failOnWarnings: Bool? = nil) {
            self.basepath = basepath
            self.body = body
            self.failOnWarnings = failOnWarnings
        }

        private enum CodingKeys: String, CodingKey {
            case body
        }
    }

    public struct ImportApiResponse: AWSDecodableShape {
        public let apiEndpoint: String?
        public let apiGatewayManaged: Bool?
        public let apiId: String?
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let importInfo: [String]?
        public let name: String?
        public let protocolType: ProtocolType?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let version: String?
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String? = nil, protocolType: ProtocolType? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct Integration: AWSDecodableShape {
        /// Specifies whether an integration is managed by API Gateway. If you created an API using using quick create, the resulting integration is managed by API Gateway. You can update a managed integration, but you can't delete it.
        public let apiGatewayManaged: Bool?
        /// The ID of the VPC link for a private integration. Supported only for HTTP APIs.
        public let connectionId: String?
        /// The type of the network connection to the integration endpoint. Specify INTERNET for connections through the public routable internet or VPC_LINK for private connections between API Gateway and resources in a VPC. The default value is INTERNET.
        public let connectionType: ConnectionType?
        /// Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors: CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob. CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string. If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.
        public let contentHandlingStrategy: ContentHandlingStrategy?
        /// Specifies the credentials required for the integration, if any. For AWS integrations, three options are available. To specify an IAM Role for API Gateway to assume, use the role's Amazon Resource Name (ARN). To require that the caller's identity be passed through from the request, specify the string arn:aws:iam::*:user/*. To use resource-based permissions on supported AWS services, specify null.
        public let credentialsArn: String?
        /// Represents the description of an integration.
        public let description: String?
        /// Represents the identifier of an integration.
        public let integrationId: String?
        /// Specifies the integration's HTTP method type.
        public let integrationMethod: String?
        /// The integration response selection expression for the integration. Supported only for WebSocket APIs. See Integration Response Selection Expressions.
        public let integrationResponseSelectionExpression: String?
        /// Supported only for HTTP API AWS_PROXY integrations. Specifies the AWS service action to invoke. To learn more, see Integration subtype reference.
        public let integrationSubtype: String?
        /// The integration type of an integration. One of the following: AWS: for integrating the route or method request with an AWS service action, including the Lambda function-invoking action. With the Lambda function-invoking action, this is referred to as the Lambda custom integration. With any other AWS service action, this is known as AWS integration. Supported only for WebSocket APIs. AWS_PROXY: for integrating the route or method request with a Lambda function or other AWS service action. This integration is also referred to as a Lambda proxy integration. HTTP: for integrating the route or method request with an HTTP endpoint. This integration is also referred to as the HTTP custom integration. Supported only for WebSocket APIs. HTTP_PROXY: for integrating the route or method request with an HTTP endpoint, with the client request passed through as-is. This is also referred to as HTTP proxy integration. MOCK: for integrating the route or method request with API Gateway as a "loopback" endpoint without invoking any backend. Supported only for WebSocket APIs.
        public let integrationType: IntegrationType?
        /// For a Lambda integration, specify the URI of a Lambda function. For an HTTP integration, specify a fully-qualified URL. For an HTTP API private integration, specify the ARN of an Application Load Balancer listener, Network Load Balancer listener, or AWS Cloud Map service. If you specify the ARN of an AWS Cloud Map service, API Gateway uses DiscoverInstances to identify resources. You can use query parameters to target specific resources. To learn more, see DiscoverInstances. For private integrations, all resources must be owned by the same AWS account.
        public let integrationUri: String?
        /// Specifies the pass-through behavior for incoming requests based on the Content-Type header in the request, and the available mapping templates specified as the requestTemplates property on the Integration resource. There are three valid values: WHEN_NO_MATCH, WHEN_NO_TEMPLATES, and NEVER. Supported only for WebSocket APIs. WHEN_NO_MATCH passes the request body for unmapped content types through to the integration backend without transformation. NEVER rejects unmapped content types with an HTTP 415 Unsupported Media Type response. WHEN_NO_TEMPLATES allows pass-through when the integration has no content types mapped to templates. However, if there is at least one content type defined, unmapped content types will be rejected with the same HTTP 415 Unsupported Media Type response.
        public let passthroughBehavior: PassthroughBehavior?
        /// Specifies the format of the payload sent to an integration. Required for HTTP APIs.
        public let payloadFormatVersion: String?
        /// For WebSocket APIs, a key-value map specifying request parameters that are passed from the method request to the backend. The key is an integration request parameter name and the associated value is a method request parameter value or static value that must be enclosed within single quotes and pre-encoded as required by the backend. The method request parameter value must match the pattern of method.request.{location}.{name}
        ///           , where
        ///             {location}
        ///            is querystring, path, or header; and
        ///             {name}
        ///            must be a valid and unique method request parameter name. For HTTP API integrations with a specified integrationSubtype, request parameters are a key-value map specifying parameters that are passed to AWS_PROXY integrations. You can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see Working with AWS service integrations for HTTP APIs. For HTTP API itegrations, without a specified integrationSubtype request parameters are a key-value map specifying how to transform HTTP requests before sending them to backend integrations. The key should follow the pattern &lt;action&gt;:&lt;header|querystring|path&gt;.&lt;location&gt;. The action can be append, overwrite or remove. For values, you can provide static values, or map request data, stage variables, or context variables that are evaluated at runtime. To learn more, see Transforming API requests and responses.
        public let requestParameters: [String: String]?
        /// Represents a map of Velocity templates that are applied on the request payload based on the value of the Content-Type header sent by the client. The content type value is the key in this map, and the template (as a String) is the value. Supported only for WebSocket APIs.
        public let requestTemplates: [String: String]?
        /// Supported only for HTTP APIs. You use response parameters to transform the HTTP response from a backend integration before returning the response to clients. Specify a key-value map from a selection key to response parameters. The selection key must be a valid HTTP status code within the range of 200-599. Response parameters are a key-value map. The key must match pattern &lt;action&gt;:&lt;header&gt;.&lt;location&gt; or overwrite.statuscode. The action can be append, overwrite or remove. The value can be a static value, or map to response data, stage variables, or context variables that are evaluated at runtime. To learn more, see Transforming API requests and responses.
        public let responseParameters: [String: [String: String]]?
        /// The template selection expression for the integration. Supported only for WebSocket APIs.
        public let templateSelectionExpression: String?
        /// Custom timeout between 50 and 29,000 milliseconds for WebSocket APIs and between 50 and 30,000 milliseconds for HTTP APIs. The default timeout is 29 seconds for WebSocket APIs and 30 seconds for HTTP APIs.
        public let timeoutInMillis: Int?
        /// The TLS configuration for a private integration. If you specify a TLS configuration, private integration traffic uses the HTTPS protocol. Supported only for HTTP APIs.
        public let tlsConfig: TlsConfig?

        public init(apiGatewayManaged: Bool? = nil, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationId: String? = nil, integrationMethod: String? = nil, integrationResponseSelectionExpression: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType? = nil, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfig? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationId = integrationId
            self.integrationMethod = integrationMethod
            self.integrationResponseSelectionExpression = integrationResponseSelectionExpression
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationId
            case integrationMethod
            case integrationResponseSelectionExpression
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct IntegrationResponse: AWSDecodableShape {
        /// Supported only for WebSocket APIs. Specifies how to handle response payload content type conversions. Supported values are CONVERT_TO_BINARY and CONVERT_TO_TEXT, with the following behaviors: CONVERT_TO_BINARY: Converts a response payload from a Base64-encoded string to the corresponding binary blob. CONVERT_TO_TEXT: Converts a response payload from a binary blob to a Base64-encoded string. If this property is not defined, the response payload will be passed through from the integration response to the route response or method response without modification.
        public let contentHandlingStrategy: ContentHandlingStrategy?
        /// The integration response ID.
        public let integrationResponseId: String?
        /// The integration response key.
        public let integrationResponseKey: String
        /// A key-value map specifying response parameters that are passed to the method response from the backend. The key is a method response header parameter name and the mapped value is an integration response header value, a static value enclosed within a pair of single quotes, or a JSON expression from the integration response body. The mapping key must match the pattern of method.response.header.{name}, where name is a valid and unique header name. The mapped non-static value must match the pattern of integration.response.header.{name} or integration.response.body.{JSON-expression}, where name is a valid and unique response header name and JSON-expression is a valid JSON expression without the $ prefix.
        public let responseParameters: [String: String]?
        /// The collection of response templates for the integration response as a string-to-string map of key-value pairs. Response templates are represented as a key/value map, with a content-type as the key and a template as the value.
        public let responseTemplates: [String: String]?
        /// The template selection expressions for the integration response.
        public let templateSelectionExpression: String?

        public init(contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationResponseId: String? = nil, integrationResponseKey: String, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationResponseId = integrationResponseId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseId
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct JWTConfiguration: AWSEncodableShape & AWSDecodableShape {
        /// A list of the intended recipients of the JWT. A valid JWT must provide an aud that matches at least one entry in this list. See RFC 7519. Supported only for HTTP APIs.
        public let audience: [String]?
        /// The base domain of the identity provider that issues JSON Web Tokens. For example, an Amazon Cognito user pool has the following format: https://cognito-idp.{region}.amazonaws.com/{userPoolId}
        ///                . Required for the JWT authorizer type. Supported only for HTTP APIs.
        public let issuer: String?

        public init(audience: [String]? = nil, issuer: String? = nil) {
            self.audience = audience
            self.issuer = issuer
        }

        private enum CodingKeys: String, CodingKey {
            case audience
            case issuer
        }
    }

    public struct Model: AWSDecodableShape {
        /// The content-type for the model, for example, "application/json".
        public let contentType: String?
        /// The description of the model.
        public let description: String?
        /// The model identifier.
        public let modelId: String?
        /// The name of the model. Must be alphanumeric.
        public let name: String
        /// The schema for the model. For application/json models, this should be JSON schema draft 4 model.
        public let schema: String?

        public init(contentType: String? = nil, description: String? = nil, modelId: String? = nil, name: String, schema: String? = nil) {
            self.contentType = contentType
            self.description = description
            self.modelId = modelId
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case modelId
            case name
            case schema
        }
    }

    public struct MutualTlsAuthentication: AWSDecodableShape {
        /// An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://bucket-name/key-name
        ///                . The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.
        public let truststoreUri: String?
        /// The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.
        public let truststoreVersion: String?
        /// A list of warnings that API Gateway returns while processing your truststore. Invalid certificates produce warnings. Mutual TLS is still enabled, but some clients might not be able to access your API. To resolve warnings, upload a new truststore to S3, and then update you domain name to use the new version.
        public let truststoreWarnings: [String]?

        public init(truststoreUri: String? = nil, truststoreVersion: String? = nil, truststoreWarnings: [String]? = nil) {
            self.truststoreUri = truststoreUri
            self.truststoreVersion = truststoreVersion
            self.truststoreWarnings = truststoreWarnings
        }

        private enum CodingKeys: String, CodingKey {
            case truststoreUri
            case truststoreVersion
            case truststoreWarnings
        }
    }

    public struct MutualTlsAuthenticationInput: AWSEncodableShape {
        /// An Amazon S3 URL that specifies the truststore for mutual TLS authentication, for example, s3://bucket-name/key-name
        ///                . The truststore can contain certificates from public or private certificate authorities. To update the truststore, upload a new version to S3, and then update your custom domain name to use the new version. To update the truststore, you must have permissions to access the S3 object.
        public let truststoreUri: String?
        /// The version of the S3 object that contains your truststore. To specify a version, you must have versioning enabled for the S3 bucket.
        public let truststoreVersion: String?

        public init(truststoreUri: String? = nil, truststoreVersion: String? = nil) {
            self.truststoreUri = truststoreUri
            self.truststoreVersion = truststoreVersion
        }

        private enum CodingKeys: String, CodingKey {
            case truststoreUri
            case truststoreVersion
        }
    }

    public struct ParameterConstraints: AWSEncodableShape & AWSDecodableShape {
        /// Whether or not the parameter is required.
        public let required: Bool?

        public init(required: Bool? = nil) {
            self.required = required
        }

        private enum CodingKeys: String, CodingKey {
            case required
        }
    }

    public struct ReimportApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "basepath", location: .querystring(locationName: "basepath")),
            AWSMemberEncoding(label: "failOnWarnings", location: .querystring(locationName: "failOnWarnings"))
        ]

        public let apiId: String
        public let basepath: String?
        public let body: String
        public let failOnWarnings: Bool?

        public init(apiId: String, basepath: String? = nil, body: String, failOnWarnings: Bool? = nil) {
            self.apiId = apiId
            self.basepath = basepath
            self.body = body
            self.failOnWarnings = failOnWarnings
        }

        private enum CodingKeys: String, CodingKey {
            case body
        }
    }

    public struct ReimportApiResponse: AWSDecodableShape {
        public let apiEndpoint: String?
        public let apiGatewayManaged: Bool?
        public let apiId: String?
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let importInfo: [String]?
        public let name: String?
        public let protocolType: ProtocolType?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let version: String?
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String? = nil, protocolType: ProtocolType? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct ResetAuthorizersCacheRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let apiId: String
        public let stageName: String

        public init(apiId: String, stageName: String) {
            self.apiId = apiId
            self.stageName = stageName
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct Route: AWSDecodableShape {
        /// Specifies whether a route is managed by API Gateway. If you created an API using quick create, the $default route is managed by API Gateway. You can't modify the $default route key.
        public let apiGatewayManaged: Bool?
        /// Specifies whether an API key is required for this route. Supported only for WebSocket APIs.
        public let apiKeyRequired: Bool?
        /// A list of authorization scopes configured on a route. The scopes are used with a JWT authorizer to authorize the method invocation. The authorization works by matching the route scopes against the scopes parsed from the access token in the incoming request. The method invocation is authorized if any route scope matches a claimed scope in the access token. Otherwise, the invocation is not authorized. When the route scope is configured, the client must provide an access token instead of an identity token for authorization purposes.
        public let authorizationScopes: [String]?
        /// The authorization type for the route. For WebSocket APIs, valid values are NONE for open access, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer For HTTP APIs, valid values are NONE for open access, JWT for using JSON Web Tokens, AWS_IAM for using AWS IAM permissions, and CUSTOM for using a Lambda authorizer.
        public let authorizationType: AuthorizationType?
        /// The identifier of the Authorizer resource to be associated with this route. The authorizer identifier is generated by API Gateway when you created the authorizer.
        public let authorizerId: String?
        /// The model selection expression for the route. Supported only for WebSocket APIs.
        public let modelSelectionExpression: String?
        /// The operation name for the route.
        public let operationName: String?
        /// The request models for the route. Supported only for WebSocket APIs.
        public let requestModels: [String: String]?
        /// The request parameters for the route. Supported only for WebSocket APIs.
        public let requestParameters: [String: ParameterConstraints]?
        /// The route ID.
        public let routeId: String?
        /// The route key for the route.
        public let routeKey: String
        /// The route response selection expression for the route. Supported only for WebSocket APIs.
        public let routeResponseSelectionExpression: String?
        /// The target for the route.
        public let target: String?

        public init(apiGatewayManaged: Bool? = nil, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeId: String? = nil, routeKey: String, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeId = routeId
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeId
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct RouteResponse: AWSDecodableShape {
        /// Represents the model selection expression of a route response. Supported only for WebSocket APIs.
        public let modelSelectionExpression: String?
        /// Represents the response models of a route response.
        public let responseModels: [String: String]?
        /// Represents the response parameters of a route response.
        public let responseParameters: [String: ParameterConstraints]?
        /// Represents the identifier of a route response.
        public let routeResponseId: String?
        /// Represents the route response key of a route response.
        public let routeResponseKey: String

        public init(modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeResponseId: String? = nil, routeResponseKey: String) {
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeResponseId = routeResponseId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseId
            case routeResponseKey
        }
    }

    public struct RouteSettings: AWSEncodableShape & AWSDecodableShape {
        /// Specifies whether (true) or not (false) data trace logging is enabled for this route. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.
        public let dataTraceEnabled: Bool?
        /// Specifies whether detailed metrics are enabled.
        public let detailedMetricsEnabled: Bool?
        /// Specifies the logging level for this route: INFO, ERROR, or OFF. This property affects the log entries pushed to Amazon CloudWatch Logs. Supported only for WebSocket APIs.
        public let loggingLevel: LoggingLevel?
        /// Specifies the throttling burst limit.
        public let throttlingBurstLimit: Int?
        /// Specifies the throttling rate limit.
        public let throttlingRateLimit: Double?

        public init(dataTraceEnabled: Bool? = nil, detailedMetricsEnabled: Bool? = nil, loggingLevel: LoggingLevel? = nil, throttlingBurstLimit: Int? = nil, throttlingRateLimit: Double? = nil) {
            self.dataTraceEnabled = dataTraceEnabled
            self.detailedMetricsEnabled = detailedMetricsEnabled
            self.loggingLevel = loggingLevel
            self.throttlingBurstLimit = throttlingBurstLimit
            self.throttlingRateLimit = throttlingRateLimit
        }

        private enum CodingKeys: String, CodingKey {
            case dataTraceEnabled
            case detailedMetricsEnabled
            case loggingLevel
            case throttlingBurstLimit
            case throttlingRateLimit
        }
    }

    public struct Stage: AWSDecodableShape {
        /// Settings for logging access in this stage.
        public let accessLogSettings: AccessLogSettings?
        /// Specifies whether a stage is managed by API Gateway. If you created an API using quick create, the $default stage is managed by API Gateway. You can't modify the $default stage.
        public let apiGatewayManaged: Bool?
        /// Specifies whether updates to an API automatically trigger a new deployment. The default value is false.
        public let autoDeploy: Bool?
        /// The identifier of a client certificate for a Stage. Supported only for WebSocket APIs.
        public let clientCertificateId: String?
        /// The timestamp when the stage was created.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        /// Default route settings for the stage.
        public let defaultRouteSettings: RouteSettings?
        /// The identifier of the Deployment that the Stage is associated with. Can't be updated if autoDeploy is enabled.
        public let deploymentId: String?
        /// The description of the stage.
        public let description: String?
        /// Describes the status of the last deployment of a stage. Supported only for stages with autoDeploy enabled.
        public let lastDeploymentStatusMessage: String?
        /// The timestamp when the stage was last updated.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastUpdatedDate: Date?
        /// Route settings for the stage, by routeKey.
        public let routeSettings: [String: RouteSettings]?
        /// The name of the stage.
        public let stageName: String
        /// A map that defines the stage variables for a stage resource. Variable names can have alphanumeric and underscore characters, and the values must match [A-Za-z0-9-._~:/?#&amp;=,]+.
        public let stageVariables: [String: String]?
        /// The collection of tags. Each tag element is associated with a given resource.
        public let tags: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiGatewayManaged: Bool? = nil, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, createdDate: Date? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, lastDeploymentStatusMessage: String? = nil, lastUpdatedDate: Date? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String, stageVariables: [String: String]? = nil, tags: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiGatewayManaged = apiGatewayManaged
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.createdDate = createdDate
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.lastDeploymentStatusMessage = lastDeploymentStatusMessage
            self.lastUpdatedDate = lastUpdatedDate
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case apiGatewayManaged
            case autoDeploy
            case clientCertificateId
            case createdDate
            case defaultRouteSettings
            case deploymentId
            case description
            case lastDeploymentStatusMessage
            case lastUpdatedDate
            case routeSettings
            case stageName
            case stageVariables
            case tags
        }
    }

    public struct TagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn"))
        ]

        public let resourceArn: String
        public let tags: [String: String]?

        public init(resourceArn: String, tags: [String: String]? = nil) {
            self.resourceArn = resourceArn
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case tags
        }
    }

    public struct TagResourceResponse: AWSDecodableShape {
        public init() {}
    }

    public struct TlsConfig: AWSDecodableShape {
        /// If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.
        public let serverNameToVerify: String?

        public init(serverNameToVerify: String? = nil) {
            self.serverNameToVerify = serverNameToVerify
        }

        private enum CodingKeys: String, CodingKey {
            case serverNameToVerify
        }
    }

    public struct TlsConfigInput: AWSEncodableShape {
        /// If you specify a server name, API Gateway uses it to verify the hostname on the integration's certificate. The server name is also included in the TLS handshake to support Server Name Indication (SNI) or virtual hosting.
        public let serverNameToVerify: String?

        public init(serverNameToVerify: String? = nil) {
            self.serverNameToVerify = serverNameToVerify
        }

        private enum CodingKeys: String, CodingKey {
            case serverNameToVerify
        }
    }

    public struct UntagResourceRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "resourceArn", location: .uri(locationName: "resource-arn")),
            AWSMemberEncoding(label: "tagKeys", location: .querystring(locationName: "tagKeys"))
        ]

        public let resourceArn: String
        public let tagKeys: [String]

        public init(resourceArn: String, tagKeys: [String]) {
            self.resourceArn = resourceArn
            self.tagKeys = tagKeys
        }

        private enum CodingKeys: CodingKey {}
    }

    public struct UpdateApiMappingRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiMappingId", location: .uri(locationName: "apiMappingId")),
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let apiId: String
        public let apiMappingId: String
        public let apiMappingKey: String?
        public let domainName: String
        public let stage: String?

        public init(apiId: String, apiMappingId: String, apiMappingKey: String? = nil, domainName: String, stage: String? = nil) {
            self.apiId = apiId
            self.apiMappingId = apiMappingId
            self.apiMappingKey = apiMappingKey
            self.domainName = domainName
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingKey
            case stage
        }
    }

    public struct UpdateApiMappingResponse: AWSDecodableShape {
        public let apiId: String?
        public let apiMappingId: String?
        public let apiMappingKey: String?
        public let stage: String?

        public init(apiId: String? = nil, apiMappingId: String? = nil, apiMappingKey: String? = nil, stage: String? = nil) {
            self.apiId = apiId
            self.apiMappingId = apiMappingId
            self.apiMappingKey = apiMappingKey
            self.stage = stage
        }

        private enum CodingKeys: String, CodingKey {
            case apiId
            case apiMappingId
            case apiMappingKey
            case stage
        }
    }

    public struct UpdateApiRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId"))
        ]

        public let apiId: String
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        public let credentialsArn: String?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let name: String?
        public let routeKey: String?
        public let routeSelectionExpression: String?
        public let target: String?
        public let version: String?

        public init(apiId: String, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, credentialsArn: String? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, name: String? = nil, routeKey: String? = nil, routeSelectionExpression: String? = nil, target: String? = nil, version: String? = nil) {
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.credentialsArn = credentialsArn
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.name = name
            self.routeKey = routeKey
            self.routeSelectionExpression = routeSelectionExpression
            self.target = target
            self.version = version
        }

        public func validate(name: String) throws {
            try self.corsConfiguration?.validate(name: "\(name).corsConfiguration")
        }

        private enum CodingKeys: String, CodingKey {
            case apiKeySelectionExpression
            case corsConfiguration
            case credentialsArn
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case name
            case routeKey
            case routeSelectionExpression
            case target
            case version
        }
    }

    public struct UpdateApiResponse: AWSDecodableShape {
        public let apiEndpoint: String?
        public let apiGatewayManaged: Bool?
        public let apiId: String?
        public let apiKeySelectionExpression: String?
        public let corsConfiguration: Cors?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let description: String?
        public let disableExecuteApiEndpoint: Bool?
        public let disableSchemaValidation: Bool?
        public let importInfo: [String]?
        public let name: String?
        public let protocolType: ProtocolType?
        public let routeSelectionExpression: String?
        public let tags: [String: String]?
        public let version: String?
        public let warnings: [String]?

        public init(apiEndpoint: String? = nil, apiGatewayManaged: Bool? = nil, apiId: String? = nil, apiKeySelectionExpression: String? = nil, corsConfiguration: Cors? = nil, createdDate: Date? = nil, description: String? = nil, disableExecuteApiEndpoint: Bool? = nil, disableSchemaValidation: Bool? = nil, importInfo: [String]? = nil, name: String? = nil, protocolType: ProtocolType? = nil, routeSelectionExpression: String? = nil, tags: [String: String]? = nil, version: String? = nil, warnings: [String]? = nil) {
            self.apiEndpoint = apiEndpoint
            self.apiGatewayManaged = apiGatewayManaged
            self.apiId = apiId
            self.apiKeySelectionExpression = apiKeySelectionExpression
            self.corsConfiguration = corsConfiguration
            self.createdDate = createdDate
            self.description = description
            self.disableExecuteApiEndpoint = disableExecuteApiEndpoint
            self.disableSchemaValidation = disableSchemaValidation
            self.importInfo = importInfo
            self.name = name
            self.protocolType = protocolType
            self.routeSelectionExpression = routeSelectionExpression
            self.tags = tags
            self.version = version
            self.warnings = warnings
        }

        private enum CodingKeys: String, CodingKey {
            case apiEndpoint
            case apiGatewayManaged
            case apiId
            case apiKeySelectionExpression
            case corsConfiguration
            case createdDate
            case description
            case disableExecuteApiEndpoint
            case disableSchemaValidation
            case importInfo
            case name
            case protocolType
            case routeSelectionExpression
            case tags
            case version
            case warnings
        }
    }

    public struct UpdateAuthorizerRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "authorizerId", location: .uri(locationName: "authorizerId"))
        ]

        public let apiId: String
        public let authorizerCredentialsArn: String?
        public let authorizerId: String
        public let authorizerPayloadFormatVersion: String?
        public let authorizerResultTtlInSeconds: Int?
        public let authorizerType: AuthorizerType?
        public let authorizerUri: String?
        public let enableSimpleResponses: Bool?
        public let identitySource: [String]?
        public let identityValidationExpression: String?
        public let jwtConfiguration: JWTConfiguration?
        public let name: String?

        public init(apiId: String, authorizerCredentialsArn: String? = nil, authorizerId: String, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType? = nil, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String]? = nil, identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String? = nil) {
            self.apiId = apiId
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerId = authorizerId
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        public func validate(name: String) throws {
            try self.validate(self.authorizerResultTtlInSeconds, name: "authorizerResultTtlInSeconds", parent: name, max: 3600)
            try self.validate(self.authorizerResultTtlInSeconds, name: "authorizerResultTtlInSeconds", parent: name, min: 0)
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct UpdateAuthorizerResponse: AWSDecodableShape {
        public let authorizerCredentialsArn: String?
        public let authorizerId: String?
        public let authorizerPayloadFormatVersion: String?
        public let authorizerResultTtlInSeconds: Int?
        public let authorizerType: AuthorizerType?
        public let authorizerUri: String?
        public let enableSimpleResponses: Bool?
        public let identitySource: [String]?
        public let identityValidationExpression: String?
        public let jwtConfiguration: JWTConfiguration?
        public let name: String?

        public init(authorizerCredentialsArn: String? = nil, authorizerId: String? = nil, authorizerPayloadFormatVersion: String? = nil, authorizerResultTtlInSeconds: Int? = nil, authorizerType: AuthorizerType? = nil, authorizerUri: String? = nil, enableSimpleResponses: Bool? = nil, identitySource: [String]? = nil, identityValidationExpression: String? = nil, jwtConfiguration: JWTConfiguration? = nil, name: String? = nil) {
            self.authorizerCredentialsArn = authorizerCredentialsArn
            self.authorizerId = authorizerId
            self.authorizerPayloadFormatVersion = authorizerPayloadFormatVersion
            self.authorizerResultTtlInSeconds = authorizerResultTtlInSeconds
            self.authorizerType = authorizerType
            self.authorizerUri = authorizerUri
            self.enableSimpleResponses = enableSimpleResponses
            self.identitySource = identitySource
            self.identityValidationExpression = identityValidationExpression
            self.jwtConfiguration = jwtConfiguration
            self.name = name
        }

        private enum CodingKeys: String, CodingKey {
            case authorizerCredentialsArn
            case authorizerId
            case authorizerPayloadFormatVersion
            case authorizerResultTtlInSeconds
            case authorizerType
            case authorizerUri
            case enableSimpleResponses
            case identitySource
            case identityValidationExpression
            case jwtConfiguration
            case name
        }
    }

    public struct UpdateDeploymentRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "deploymentId", location: .uri(locationName: "deploymentId"))
        ]

        public let apiId: String
        public let deploymentId: String
        public let description: String?

        public init(apiId: String, deploymentId: String, description: String? = nil) {
            self.apiId = apiId
            self.deploymentId = deploymentId
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case description
        }
    }

    public struct UpdateDeploymentResponse: AWSDecodableShape {
        public let autoDeployed: Bool?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let deploymentId: String?
        public let deploymentStatus: DeploymentStatus?
        public let deploymentStatusMessage: String?
        public let description: String?

        public init(autoDeployed: Bool? = nil, createdDate: Date? = nil, deploymentId: String? = nil, deploymentStatus: DeploymentStatus? = nil, deploymentStatusMessage: String? = nil, description: String? = nil) {
            self.autoDeployed = autoDeployed
            self.createdDate = createdDate
            self.deploymentId = deploymentId
            self.deploymentStatus = deploymentStatus
            self.deploymentStatusMessage = deploymentStatusMessage
            self.description = description
        }

        private enum CodingKeys: String, CodingKey {
            case autoDeployed
            case createdDate
            case deploymentId
            case deploymentStatus
            case deploymentStatusMessage
            case description
        }
    }

    public struct UpdateDomainNameRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "domainName", location: .uri(locationName: "domainName"))
        ]

        public let domainName: String
        public let domainNameConfigurations: [DomainNameConfiguration]?
        public let mutualTlsAuthentication: MutualTlsAuthenticationInput?

        public init(domainName: String, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthenticationInput? = nil) {
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
        }

        private enum CodingKeys: String, CodingKey {
            case domainNameConfigurations
            case mutualTlsAuthentication
        }
    }

    public struct UpdateDomainNameResponse: AWSDecodableShape {
        public let apiMappingSelectionExpression: String?
        public let domainName: String?
        public let domainNameConfigurations: [DomainNameConfiguration]?
        public let mutualTlsAuthentication: MutualTlsAuthentication?
        public let tags: [String: String]?

        public init(apiMappingSelectionExpression: String? = nil, domainName: String? = nil, domainNameConfigurations: [DomainNameConfiguration]? = nil, mutualTlsAuthentication: MutualTlsAuthentication? = nil, tags: [String: String]? = nil) {
            self.apiMappingSelectionExpression = apiMappingSelectionExpression
            self.domainName = domainName
            self.domainNameConfigurations = domainNameConfigurations
            self.mutualTlsAuthentication = mutualTlsAuthentication
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case apiMappingSelectionExpression
            case domainName
            case domainNameConfigurations
            case mutualTlsAuthentication
            case tags
        }
    }

    public struct UpdateIntegrationRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId"))
        ]

        public let apiId: String
        public let connectionId: String?
        public let connectionType: ConnectionType?
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let credentialsArn: String?
        public let description: String?
        public let integrationId: String
        public let integrationMethod: String?
        public let integrationSubtype: String?
        public let integrationType: IntegrationType?
        public let integrationUri: String?
        public let passthroughBehavior: PassthroughBehavior?
        public let payloadFormatVersion: String?
        public let requestParameters: [String: String]?
        public let requestTemplates: [String: String]?
        public let responseParameters: [String: [String: String]]?
        public let templateSelectionExpression: String?
        public let timeoutInMillis: Int?
        public let tlsConfig: TlsConfigInput?

        public init(apiId: String, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationId: String, integrationMethod: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType? = nil, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfigInput? = nil) {
            self.apiId = apiId
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationId = integrationId
            self.integrationMethod = integrationMethod
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        public func validate(name: String) throws {
            try self.validate(self.timeoutInMillis, name: "timeoutInMillis", parent: name, max: 30000)
            try self.validate(self.timeoutInMillis, name: "timeoutInMillis", parent: name, min: 50)
        }

        private enum CodingKeys: String, CodingKey {
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationMethod
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct UpdateIntegrationResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "integrationId", location: .uri(locationName: "integrationId")),
            AWSMemberEncoding(label: "integrationResponseId", location: .uri(locationName: "integrationResponseId"))
        ]

        public let apiId: String
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let integrationId: String
        public let integrationResponseId: String
        public let integrationResponseKey: String?
        public let responseParameters: [String: String]?
        public let responseTemplates: [String: String]?
        public let templateSelectionExpression: String?

        public init(apiId: String, contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationId: String, integrationResponseId: String, integrationResponseKey: String? = nil, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.apiId = apiId
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationId = integrationId
            self.integrationResponseId = integrationResponseId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct UpdateIntegrationResponseResponse: AWSDecodableShape {
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let integrationResponseId: String?
        public let integrationResponseKey: String?
        public let responseParameters: [String: String]?
        public let responseTemplates: [String: String]?
        public let templateSelectionExpression: String?

        public init(contentHandlingStrategy: ContentHandlingStrategy? = nil, integrationResponseId: String? = nil, integrationResponseKey: String? = nil, responseParameters: [String: String]? = nil, responseTemplates: [String: String]? = nil, templateSelectionExpression: String? = nil) {
            self.contentHandlingStrategy = contentHandlingStrategy
            self.integrationResponseId = integrationResponseId
            self.integrationResponseKey = integrationResponseKey
            self.responseParameters = responseParameters
            self.responseTemplates = responseTemplates
            self.templateSelectionExpression = templateSelectionExpression
        }

        private enum CodingKeys: String, CodingKey {
            case contentHandlingStrategy
            case integrationResponseId
            case integrationResponseKey
            case responseParameters
            case responseTemplates
            case templateSelectionExpression
        }
    }

    public struct UpdateIntegrationResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let connectionId: String?
        public let connectionType: ConnectionType?
        public let contentHandlingStrategy: ContentHandlingStrategy?
        public let credentialsArn: String?
        public let description: String?
        public let integrationId: String?
        public let integrationMethod: String?
        public let integrationResponseSelectionExpression: String?
        public let integrationSubtype: String?
        public let integrationType: IntegrationType?
        public let integrationUri: String?
        public let passthroughBehavior: PassthroughBehavior?
        public let payloadFormatVersion: String?
        public let requestParameters: [String: String]?
        public let requestTemplates: [String: String]?
        public let responseParameters: [String: [String: String]]?
        public let templateSelectionExpression: String?
        public let timeoutInMillis: Int?
        public let tlsConfig: TlsConfig?

        public init(apiGatewayManaged: Bool? = nil, connectionId: String? = nil, connectionType: ConnectionType? = nil, contentHandlingStrategy: ContentHandlingStrategy? = nil, credentialsArn: String? = nil, description: String? = nil, integrationId: String? = nil, integrationMethod: String? = nil, integrationResponseSelectionExpression: String? = nil, integrationSubtype: String? = nil, integrationType: IntegrationType? = nil, integrationUri: String? = nil, passthroughBehavior: PassthroughBehavior? = nil, payloadFormatVersion: String? = nil, requestParameters: [String: String]? = nil, requestTemplates: [String: String]? = nil, responseParameters: [String: [String: String]]? = nil, templateSelectionExpression: String? = nil, timeoutInMillis: Int? = nil, tlsConfig: TlsConfig? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.connectionId = connectionId
            self.connectionType = connectionType
            self.contentHandlingStrategy = contentHandlingStrategy
            self.credentialsArn = credentialsArn
            self.description = description
            self.integrationId = integrationId
            self.integrationMethod = integrationMethod
            self.integrationResponseSelectionExpression = integrationResponseSelectionExpression
            self.integrationSubtype = integrationSubtype
            self.integrationType = integrationType
            self.integrationUri = integrationUri
            self.passthroughBehavior = passthroughBehavior
            self.payloadFormatVersion = payloadFormatVersion
            self.requestParameters = requestParameters
            self.requestTemplates = requestTemplates
            self.responseParameters = responseParameters
            self.templateSelectionExpression = templateSelectionExpression
            self.timeoutInMillis = timeoutInMillis
            self.tlsConfig = tlsConfig
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case connectionId
            case connectionType
            case contentHandlingStrategy
            case credentialsArn
            case description
            case integrationId
            case integrationMethod
            case integrationResponseSelectionExpression
            case integrationSubtype
            case integrationType
            case integrationUri
            case passthroughBehavior
            case payloadFormatVersion
            case requestParameters
            case requestTemplates
            case responseParameters
            case templateSelectionExpression
            case timeoutInMillis
            case tlsConfig
        }
    }

    public struct UpdateModelRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "modelId", location: .uri(locationName: "modelId"))
        ]

        public let apiId: String
        public let contentType: String?
        public let description: String?
        public let modelId: String
        public let name: String?
        public let schema: String?

        public init(apiId: String, contentType: String? = nil, description: String? = nil, modelId: String, name: String? = nil, schema: String? = nil) {
            self.apiId = apiId
            self.contentType = contentType
            self.description = description
            self.modelId = modelId
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case name
            case schema
        }
    }

    public struct UpdateModelResponse: AWSDecodableShape {
        public let contentType: String?
        public let description: String?
        public let modelId: String?
        public let name: String?
        public let schema: String?

        public init(contentType: String? = nil, description: String? = nil, modelId: String? = nil, name: String? = nil, schema: String? = nil) {
            self.contentType = contentType
            self.description = description
            self.modelId = modelId
            self.name = name
            self.schema = schema
        }

        private enum CodingKeys: String, CodingKey {
            case contentType
            case description
            case modelId
            case name
            case schema
        }
    }

    public struct UpdateRouteRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId"))
        ]

        public let apiId: String
        public let apiKeyRequired: Bool?
        public let authorizationScopes: [String]?
        public let authorizationType: AuthorizationType?
        public let authorizerId: String?
        public let modelSelectionExpression: String?
        public let operationName: String?
        public let requestModels: [String: String]?
        public let requestParameters: [String: ParameterConstraints]?
        public let routeId: String
        public let routeKey: String?
        public let routeResponseSelectionExpression: String?
        public let target: String?

        public init(apiId: String, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeId: String, routeKey: String? = nil, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiId = apiId
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeId = routeId
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct UpdateRouteResponseRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "routeId", location: .uri(locationName: "routeId")),
            AWSMemberEncoding(label: "routeResponseId", location: .uri(locationName: "routeResponseId"))
        ]

        public let apiId: String
        public let modelSelectionExpression: String?
        public let responseModels: [String: String]?
        public let responseParameters: [String: ParameterConstraints]?
        public let routeId: String
        public let routeResponseId: String
        public let routeResponseKey: String?

        public init(apiId: String, modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeId: String, routeResponseId: String, routeResponseKey: String? = nil) {
            self.apiId = apiId
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeId = routeId
            self.routeResponseId = routeResponseId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseKey
        }
    }

    public struct UpdateRouteResponseResponse: AWSDecodableShape {
        public let modelSelectionExpression: String?
        public let responseModels: [String: String]?
        public let responseParameters: [String: ParameterConstraints]?
        public let routeResponseId: String?
        public let routeResponseKey: String?

        public init(modelSelectionExpression: String? = nil, responseModels: [String: String]? = nil, responseParameters: [String: ParameterConstraints]? = nil, routeResponseId: String? = nil, routeResponseKey: String? = nil) {
            self.modelSelectionExpression = modelSelectionExpression
            self.responseModels = responseModels
            self.responseParameters = responseParameters
            self.routeResponseId = routeResponseId
            self.routeResponseKey = routeResponseKey
        }

        private enum CodingKeys: String, CodingKey {
            case modelSelectionExpression
            case responseModels
            case responseParameters
            case routeResponseId
            case routeResponseKey
        }
    }

    public struct UpdateRouteResult: AWSDecodableShape {
        public let apiGatewayManaged: Bool?
        public let apiKeyRequired: Bool?
        public let authorizationScopes: [String]?
        public let authorizationType: AuthorizationType?
        public let authorizerId: String?
        public let modelSelectionExpression: String?
        public let operationName: String?
        public let requestModels: [String: String]?
        public let requestParameters: [String: ParameterConstraints]?
        public let routeId: String?
        public let routeKey: String?
        public let routeResponseSelectionExpression: String?
        public let target: String?

        public init(apiGatewayManaged: Bool? = nil, apiKeyRequired: Bool? = nil, authorizationScopes: [String]? = nil, authorizationType: AuthorizationType? = nil, authorizerId: String? = nil, modelSelectionExpression: String? = nil, operationName: String? = nil, requestModels: [String: String]? = nil, requestParameters: [String: ParameterConstraints]? = nil, routeId: String? = nil, routeKey: String? = nil, routeResponseSelectionExpression: String? = nil, target: String? = nil) {
            self.apiGatewayManaged = apiGatewayManaged
            self.apiKeyRequired = apiKeyRequired
            self.authorizationScopes = authorizationScopes
            self.authorizationType = authorizationType
            self.authorizerId = authorizerId
            self.modelSelectionExpression = modelSelectionExpression
            self.operationName = operationName
            self.requestModels = requestModels
            self.requestParameters = requestParameters
            self.routeId = routeId
            self.routeKey = routeKey
            self.routeResponseSelectionExpression = routeResponseSelectionExpression
            self.target = target
        }

        private enum CodingKeys: String, CodingKey {
            case apiGatewayManaged
            case apiKeyRequired
            case authorizationScopes
            case authorizationType
            case authorizerId
            case modelSelectionExpression
            case operationName
            case requestModels
            case requestParameters
            case routeId
            case routeKey
            case routeResponseSelectionExpression
            case target
        }
    }

    public struct UpdateStageRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "apiId", location: .uri(locationName: "apiId")),
            AWSMemberEncoding(label: "stageName", location: .uri(locationName: "stageName"))
        ]

        public let accessLogSettings: AccessLogSettings?
        public let apiId: String
        public let autoDeploy: Bool?
        public let clientCertificateId: String?
        public let defaultRouteSettings: RouteSettings?
        public let deploymentId: String?
        public let description: String?
        public let routeSettings: [String: RouteSettings]?
        public let stageName: String
        public let stageVariables: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiId: String, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String, stageVariables: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiId = apiId
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case autoDeploy
            case clientCertificateId
            case defaultRouteSettings
            case deploymentId
            case description
            case routeSettings
            case stageVariables
        }
    }

    public struct UpdateStageResponse: AWSDecodableShape {
        public let accessLogSettings: AccessLogSettings?
        public let apiGatewayManaged: Bool?
        public let autoDeploy: Bool?
        public let clientCertificateId: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let defaultRouteSettings: RouteSettings?
        public let deploymentId: String?
        public let description: String?
        public let lastDeploymentStatusMessage: String?
        @OptionalCustomCoding<ISO8601DateCoder>
        public var lastUpdatedDate: Date?
        public let routeSettings: [String: RouteSettings]?
        public let stageName: String?
        public let stageVariables: [String: String]?
        public let tags: [String: String]?

        public init(accessLogSettings: AccessLogSettings? = nil, apiGatewayManaged: Bool? = nil, autoDeploy: Bool? = nil, clientCertificateId: String? = nil, createdDate: Date? = nil, defaultRouteSettings: RouteSettings? = nil, deploymentId: String? = nil, description: String? = nil, lastDeploymentStatusMessage: String? = nil, lastUpdatedDate: Date? = nil, routeSettings: [String: RouteSettings]? = nil, stageName: String? = nil, stageVariables: [String: String]? = nil, tags: [String: String]? = nil) {
            self.accessLogSettings = accessLogSettings
            self.apiGatewayManaged = apiGatewayManaged
            self.autoDeploy = autoDeploy
            self.clientCertificateId = clientCertificateId
            self.createdDate = createdDate
            self.defaultRouteSettings = defaultRouteSettings
            self.deploymentId = deploymentId
            self.description = description
            self.lastDeploymentStatusMessage = lastDeploymentStatusMessage
            self.lastUpdatedDate = lastUpdatedDate
            self.routeSettings = routeSettings
            self.stageName = stageName
            self.stageVariables = stageVariables
            self.tags = tags
        }

        private enum CodingKeys: String, CodingKey {
            case accessLogSettings
            case apiGatewayManaged
            case autoDeploy
            case clientCertificateId
            case createdDate
            case defaultRouteSettings
            case deploymentId
            case description
            case lastDeploymentStatusMessage
            case lastUpdatedDate
            case routeSettings
            case stageName
            case stageVariables
            case tags
        }
    }

    public struct UpdateVpcLinkRequest: AWSEncodableShape {
        public static var _encoding = [
            AWSMemberEncoding(label: "vpcLinkId", location: .uri(locationName: "vpcLinkId"))
        ]

        public let name: String?
        public let vpcLinkId: String

        public init(name: String? = nil, vpcLinkId: String) {
            self.name = name
            self.vpcLinkId = vpcLinkId
        }

        private enum CodingKeys: String, CodingKey {
            case name
        }
    }

    public struct UpdateVpcLinkResponse: AWSDecodableShape {
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        public let name: String?
        public let securityGroupIds: [String]?
        public let subnetIds: [String]?
        public let tags: [String: String]?
        public let vpcLinkId: String?
        public let vpcLinkStatus: VpcLinkStatus?
        public let vpcLinkStatusMessage: String?
        public let vpcLinkVersion: VpcLinkVersion?

        public init(createdDate: Date? = nil, name: String? = nil, securityGroupIds: [String]? = nil, subnetIds: [String]? = nil, tags: [String: String]? = nil, vpcLinkId: String? = nil, vpcLinkStatus: VpcLinkStatus? = nil, vpcLinkStatusMessage: String? = nil, vpcLinkVersion: VpcLinkVersion? = nil) {
            self.createdDate = createdDate
            self.name = name
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
            self.tags = tags
            self.vpcLinkId = vpcLinkId
            self.vpcLinkStatus = vpcLinkStatus
            self.vpcLinkStatusMessage = vpcLinkStatusMessage
            self.vpcLinkVersion = vpcLinkVersion
        }

        private enum CodingKeys: String, CodingKey {
            case createdDate
            case name
            case securityGroupIds
            case subnetIds
            case tags
            case vpcLinkId
            case vpcLinkStatus
            case vpcLinkStatusMessage
            case vpcLinkVersion
        }
    }

    public struct VpcLink: AWSDecodableShape {
        /// The timestamp when the VPC link was created.
        @OptionalCustomCoding<ISO8601DateCoder>
        public var createdDate: Date?
        /// The name of the VPC link.
        public let name: String
        /// A list of security group IDs for the VPC link.
        public let securityGroupIds: [String]
        /// A list of subnet IDs to include in the VPC link.
        public let subnetIds: [String]
        /// Tags for the VPC link.
        public let tags: [String: String]?
        /// The ID of the VPC link.
        public let vpcLinkId: String
        /// The status of the VPC link.
        public let vpcLinkStatus: VpcLinkStatus?
        /// A message summarizing the cause of the status of the VPC link.
        public let vpcLinkStatusMessage: String?
        /// The version of the VPC link.
        public let vpcLinkVersion: VpcLinkVersion?

        public init(createdDate: Date? = nil, name: String, securityGroupIds: [String], subnetIds: [String], tags: [String: String]? = nil, vpcLinkId: String, vpcLinkStatus: VpcLinkStatus? = nil, vpcLinkStatusMessage: String? = nil, vpcLinkVersion: VpcLinkVersion? = nil) {
            self.createdDate = createdDate
            self.name = name
            self.securityGroupIds = securityGroupIds
            self.subnetIds = subnetIds
            self.tags = tags
            self.vpcLinkId = vpcLinkId
            self.vpcLinkStatus = vpcLinkStatus
            self.vpcLinkStatusMessage = vpcLinkStatusMessage
            self.vpcLinkVersion = vpcLinkVersion
        }

        private enum CodingKeys: String, CodingKey {
            case createdDate
            case name
            case securityGroupIds
            case subnetIds
            case tags
            case vpcLinkId
            case vpcLinkStatus
            case vpcLinkStatusMessage
            case vpcLinkVersion
        }
    }
}
